Warning: Many parameters cause high contrast flashing patterns.
I'm using my vim inspired keybinding library for controls, changing simulation parameters can be
done via keybindings and grid values can be changed via mouse. There are two modes for control,
normal and brush. Normal mode has most controls, brush mode is just used for changing the
settings for painting on the grid. Esc brings you back to normal mode.
Just like in vim, you can preceed commands with a number to repeat them that many times.
i.e. 25+ will increase probability amplification by 25 steps.
Macros are also supported using q but outside the scope of this readme.
space - play/pause> - Advance a single frame (useful when paused)f - Only render every other frame, useful for period 2 osicllators. There can be other period
oscillations this does not address.+/= - Increase probability amplification- - Decrease probability amplification] - Increase probability x threshold[ - Decrease probability x threshold' - Increase probability y offset; - Decrease probability y offsetx - Kill all cellss - Mirror top left quadrant to the rest of the grid. Symmetric patterns are interesting.b - Enter brush moder - Reset the simulation with random parameters. I've found that the most interesting patterns
come from tweaking parameters manually.esc - Exit brush mode+ - Increase brush value- - Decrease brush value] - Increase brush size[ - Decrease brush sizem - Toggle between set, observe, and randomize brush modesTake the case that a call is 30% alive, and has 3 neighors each 50% alive. The rest being dead.
The probabilities are as follows:
p(0) = .125
p(1) = .375
p(2) = .375
p(3) = .125
p(3-8) = 0
Using the current cell state and Conways Rules
It can be alive according to two rules:
.3 * (.375 + .125) + (.125 * .7) = 23.75% aliveand
.7 * (.125 + .375 + .375) + (.3 * .875) = 76.25% dead(of course these always sum to 1)
This does mean that the complexity of calculating the next state is equivalent to calculating 512 states for the standard game of life.
Following these calculations, you don't get anything terribly interesting to look at. A blob of partially alive cells that either shrinks or grows depending on the curve of it's border between life and death.
By manipulating the probability, much more interesting patterns can emerge. I messed around with
several ideas, but no matter what they are all hacks. What I ended up doing was having a simple
function with 3 parameters, m, x, and y. I tweaked the exact method several times, but basically
m represents slope, x is a threshold value. If probability is less than x it gets reduced in
accordance with slope, if probability is greater than x it gets amplified. y is just a simple
addition. Probability is clamped between 0 and 1. So no matter what these parameters are, a fully
observed grid is just normal conways game of life.
m=1.42, x=0.21, y=0
m=1.6, x=.42, y=.04
A while ago I had an idea for how a cellular automata could exhibit something akin to instantaneous wavefunction collapse and entanglement using mostly local rules. The trick of it was to use a reversible cellular automata and when a measurement was made reverse time until reaching the initial source of uncertainly, carrying back information about the measurement parameters. Then apply the measurement and simulate forward to carry the result back to the point of observation (and any correlated cells). If you were observing the automata in only the forward direction, measurements would appear to have non-local effects.
I never fully fleshed out the idea, for instance, the direction of time is a non-local variable in the example above. Maybe it could be done locally with different regions having different time directions but I'm not sure how the boundaries would work. I like to think it could work.
Whatever rules the automata follows would also need to have some restrictions. For example, the continuous values cannot be allowed to effect the classical ones. That is, running the automata in reverse then forwards must always return the same classical state, no matter what changes are made to the continuous values. This would impose restrictions on information transfer, just like entanglement does not allow faster than light information transfer, this would not allow information transfer back in time.
Is there an un-measurment problem? Introducing uncertainty to the system seems just as problematic as removing it via observation.